package com.rc.web.service.impl;

import com.aliyun.oss.OSS;
import com.aliyun.oss.model.ObjectMetadata;
import com.rc.common.properties.OssProperties;
import com.rc.pojo.vo.file.UploadVO;
import com.rc.web.service.FileService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;
import java.util.UUID;

/**
 * 文件服务实现类
 * 提供文件上传相关的业务逻辑实现
 */
@RequiredArgsConstructor
public class FileServiceImpl implements FileService {
    // 阿里云OSS客户端
    private final OSS ossClient;
    // OSS配置属性
    private final OssProperties ossProperties;

    /**
     * 文件上传方法
     * @param file 要上传的文件
     * @return 上传结果VO
     */
    @Override
    public UploadVO upload(MultipartFile file) {
        try {
            // 生成唯一文件名
            var uuid = UUID.randomUUID().toString();
            var originalFilename = file.getOriginalFilename();
            var fileName = uuid + originalFilename.substring(originalFilename.lastIndexOf("."));
            
            // 创建元数据对象
            var meta = new ObjectMetadata();
            // 如果需要可以设置文件类型
            // meta.setContentType("image/jpg");
            
            // 上传文件到OSS
            ossClient.putObject(ossProperties.getBucketName(), fileName, file.getInputStream(), meta);

            // 生成文件访问URL
            var url = String.format("%s/%s", ossProperties.getPrefix(), fileName);
            
            // 返回上传结果
            return UploadVO.builder()
                    .name(fileName)
                    .url(url)
                    .build();
        } catch (IOException e) {
            // 处理上传异常
            throw new RuntimeException(e);
        }
    }

    @Override
    public UploadVO uploadToFolder(MultipartFile file, String folder) {
        return null;
    }

    /**
     * 获取指定文件夹中的所有图片URL
     *
     * @param folder 文件夹路径
     * @return 图片URL列表
     */
    @Override
    public List<String> getImagesFromFolder(String folder) {
        return List.of();
    }
}
